package com.zmn.plat.business.interfaces.price.meter3;

import com.zmn.plat.common.dto.base.AcceptProjectDRO;
import com.zmn.plat.common.dto.base.FaultDRO;
import com.zmn.plat.common.dto.base.PhenomenonDRO;
import com.zmn.plat.common.dto.base.ServiceContentDRO;
import com.zmn.plat.common.dto.brand.BaseBrandDRO;
import com.zmn.plat.common.dto.price.meter3.*;
import com.zmn.plat.common.dto.product.tariff.TariffBackProductDRO;

import java.util.List;

/**
 * 描述: 计价器3.0流程接口类
 *
 * @author guoqiao
 * @since 2021/11/24 18:56
 */
public interface MeterFlow3BService {

    /**
     * 描述: 根据前台产品查询后台产品列表
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.product.tariff.TariffBackProductDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<TariffBackProductDRO> listErpProductByQuery(MeterErpProductQuery3 query);

    /**
     * 描述: 根据后台产品查询品牌列表
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.brand.BaseBrandDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<BaseBrandDRO> listBrandByQuery(MeterBaseQuery3 query);

    /**
     * 描述: 根据后台产品查询故障现象
     * 数据获取：后台产品“计价器3.0价格表”中启用服务项对应的故障现象 && 后台产品二级分类上的故障现象
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.brand.BaseBrandDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<PhenomenonDRO> listPhenoByQuery(MeterBaseQuery3 query);

    /**
     * 描述: 根据后台产品、故障现象查询故障
     * 获取数据：选中故障现象下关联的启用“具体故障”且该具体故障被该后台产品的计价器3.0服务项关联（交集）
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.brand.BaseBrandDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<FaultDRO> listFaultByQuery(MeterFaultQuery3 query);

    /**
     * 描述: 根据后台产品查询服务内容
     * 数据获取：后台产品关联二级分类配置的标准“服务内容”+选中维修项目配置“服务内容”（并集）
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.base.ServiceContentDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<ServiceContentDRO> listServiceContentByQuery(MeterContentQuery3 query);

    /**
     * 描述: 根据后台产品查询验收项目
     * 用户端：取数规则：后台二级分类→验收项目（关联在二级分类上的“用户”验收项目）
     * 工程师端：1.故障检测：取数规则：后台二级分类→验收项目（关联在二级分类上的“工程师”验收项目）
     *         2.故障点检测：取数规则：后台产品→服务项目→验收项目（关联在服务项目上的验收项目）。
     *
     * @param query
     * @return list<com.zmn.plat.common.dto.base.AcceptProjectDRO>
     * @author guoqiao
     * @since 2021/11/24 10:40
     */
    List<AcceptProjectDRO> listAcceptItemByQuery(MeterAcceptQuery3 query);

}
